13.2.1 容器与非持久数据
毫无疑问,容器擅长无状态和非持久化事务。
每个容器都被自动分配了本地存储。默认情况下,这是容器全部文件和文件系统保存的地方。读者可能听过一些非持久存储相关的名称,如本地存储、GraphDriver存储以及SnapShotter存储。总之,非持久存储属于容器的一部分,并且与容器的生命周期一致——容器创建时会创建非持久化存储,同时该存储也会随容器的删除而删除。很简单。
在Linux系统中,该存储的目录在 /var/lib/docker/<storage-driver>/
之下,是容器的一部分。在Windows系统中位于 C\ProgramData\Docker\windowsfilter\
目录之下。
如果在生产环境中使用Linux运行Docker,需要确认当前存储驱动(GraphDriver)与Linux版本是否相符。下面列举了一些指导建议。
- RedHat Enterprise Linux:Docker 17.06或者更高的版本中使用
Overlay2
驱动。在更早的版本中,使用Device Mapper
驱动。这适用于Oracle Linux以及其他Red Hat相关发行版。 - Ubuntu:使用
Overlay2
或者AUFS
驱动。如果读者正在使用Linux4.x或者更高版本的内核,建议使用Overlay2
。 - SUSE Linux Enterprise Server:使用
Btrfs
存储驱动。 - Windows:Windows只有一种驱动,已经默认设置。
上述清单只作为建议。随着时间发展, Overlay2
驱动正在逐渐流行,可能在未来会成为大多数平台上的推荐存储驱动。如果读者使用Docker企业版(EE),并且有技术支持合约,建议通过咨询获取最新的兼容矩阵。
继续回到正题。
默认情况下,容器的所有存储都使用本地存储。所以默认情况下容器全部目录都是用该存储。
如果容器不产生持久化数据,那么本地存储即可满足需求并且能够正常使用。但是如果容器确实需要持久化数据,就需要阅读13.2.2节了。